#include<stdio.h>
#define maxSize 100
//定义一个顺序栈，四个操作。判断栈空栈满，插入，读出。

typedef struct SqStack
{
	int data[maxSize];//用于存储
	int top;//用于栈的指针，准确说是数组的下标
	
}SqStack;
// 栈初始化

void initStack(SqStack &st){
	st.top=-1;
}

//插入数据
int pushStack(SqStack &st,int a){
	//先判断是否为栈满
	if(st.top==maxSize-1){
		return 0;
	}
	else
	{
		st.top++;
		st.data[st.top]=a;
		// st.data[st.top]=a;
		return 1;
	}
}
//取出数据
//return 返回应该是成功与否的标志，值可以使用传引用方式回传。
int pullStack(SqStack &st,int &x){
	//判断是否为空栈

	if(st.top==-1){
		return 0;

	}else{
		x = st.data[st.top];
		st.top--;
		return 1;
	//	return st.data[st.top--];
	}
}	
// 清空栈
int destroyStack(SqStack &st){
	while(st.top!=-1){
		st.data[st.top--]=0;
	}
	return 1;
}
//判断是否栈空
int isEmpty(SqStack st){
	if(st.top==-1){
		return 1;
	}else
		return 0;
}


int main(){
	SqStack st;//这个结构体是有一个top指针和一个存储数据的data数组
	//初始化
	initStack(st);
	int array[]= {1,2,3,4,5,6,7,8,9};
	int *p=array;
	for(int i=0; i<9;i++){
		pushStack(st,array[i]);
	}
	int x =0;
	while(pullStack(st,x)!=0){
		printf("%d\n",x );
	}
	destroyStack(st);
	if(isEmpty(st)){
		printf("栈空！\n");
	}else
		printf("非空！\n");
	return 0;
}
